1
火星上的并发编程
AI017Lesson 8
00:00

火星上的并发编程是一门管理多个独立操作(如探测车导航、生命信号遥测和卫星上行链路)的艺术,而无需让系统停顿。在 Go 中,一个 独立运行的任务 被称为 goroutine

1. 非确定性原则

最好始终假设不同 goroutine 中的操作 可能以任意顺序运行。由于 Go 运行时会在可用核心间调度任务,因此在没有显式同步的情况下,我们无法依赖一个探测车完成扫描后再由另一个开始传输。

go printGopher(c) // 启动一个新的独立任务

2. 同步机制

为了管理这些任务,Go 提供了两种主要工具:

  • 互斥锁: goroutine 可以使用一个 mutex 来排除彼此在同一时间执行某项操作。
  • select 语句: 它看起来像一个 switch 语句,每个分支都包含一个通道接收或发送操作。 select 会等待直到某个分支就绪,然后执行该分支。
企鹅管理员(安全帽与便签本)SELECT探测车阿尔法探测车贝塔

3. 工作者骨架

长期运行的工作者通常会结合使用一个无限循环和 select 来同时监控多个通信通道:

func worker() {
for {
select {
// 等待通道在这里。
}
}
}
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>